from __future__ import annotations
from typing import Optional
from sqlalchemy.orm import Mapped, mapped_column
from extensions import db
from datetime import datetime
from sqlalchemy import func  # 新增导入

class Hierarchy(db.Model):
    """层级模型"""
    __tablename__ = 'hierarchies'

    # 层级唯一标识符，使用UUID格式作为层级的唯一标识，用于系统间数据关联
    hierarchy_id: Mapped[str] = mapped_column(db.String(36), primary_key=True)
    # 层级名称，如：总经理、店长、主管等，用于标识管理层级
    name: Mapped[str] = mapped_column(db.String(100), nullable=False)
    # 层级等级，数字越小级别越高，如：1-总经理，2-店长，3-主管
    level: Mapped[int] = mapped_column(db.Integer, nullable=False)
    # 上级层级ID，关联hierarchies表，用于构建层级树形结构
    parent_id: Mapped[Optional[str]] = mapped_column(db.String(36), db.ForeignKey('hierarchies.hierarchy_id'))
    # 层级描述信息，包含该层级的职责、权限等详细说明
    description: Mapped[Optional[str]] = mapped_column(db.Text)
    # 记录创建时间，层级信息首次创建的时间戳
    created_at: Mapped[datetime] = mapped_column(
        db.DateTime,
        server_default=func.now(),  # 优先使用数据库当前时间
        default=datetime.utcnow     # 使用Python系统时间作为后备
    )
    # 记录最后更新时间，层级信息最后一次修改的时间戳
    updated_at: Mapped[datetime] = mapped_column(
        db.DateTime,
        server_default=func.now(),  # 优先使用数据库当前时间
        default=datetime.utcnow,    # 使用Python系统时间作为后备
        onupdate=datetime.utcnow    # 更新时使用Python系统时间
    )

    def __init__(self, hierarchy_id, name, level, parent_id=None, description=None):
        self.hierarchy_id = hierarchy_id
        self.name = name
        self.level = level
        self.parent_id = parent_id
        self.description = description

    def to_dict(self):
        """将模型转换为字典"""
        return {
            'hierarchy_id': self.hierarchy_id,
            'name': self.name,
            'level': self.level,
            'parent_id': self.parent_id,
            'description': self.description,
            'created_at': self.created_at.isoformat() if self.created_at else None,
            'updated_at': self.updated_at.isoformat() if self.updated_at else None
        }